package com.sunyy.codegenerator.controller;

import com.mybatisflex.core.query.QueryWrapper;
import com.sunyy.codegenerator.common.Message;
import com.sunyy.codegenerator.common.MyException;
import com.sunyy.codegenerator.dto.templateFileInfo.ListFileByGroupIdDto;
import com.sunyy.codegenerator.dto.templateFileInfo.SaveTemplateDto;
import com.sunyy.codegenerator.dto.templateFileInfo.UploadTemplateFilesDto;
import com.sunyy.codegenerator.entity.TemplateFileInfo;
import com.sunyy.codegenerator.service.TemplateFileInfoService;
import com.sunyy.codegenerator.vo.TreeNode;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 分组内模板文件控制层
 *
 * @author sunyy
 * @since 2025/7/19
 */
@Slf4j
@RestController
@RequestMapping("/templateFileInfo")
public class TemplateFileInfoController {

    @Resource
    private TemplateFileInfoService templateFileInfoService;

    /**
     * 新增分组内的模板文件
     */
    @PostMapping("/saveTemplate")
    public Message<?> add(SaveTemplateDto dto) {
        templateFileInfoService.saveTemplate(dto);
        return Message.okWithNothing();
    }

    /**
     * 删除分组内的模板文件
     */
    @PostMapping("/deleteTemplate")
    public Message<?> add(String id) {
        templateFileInfoService.deleteTemplate(id);
        return Message.okWithNothing();
    }

    /**
     * 根据groupId查询模板文件列表
     *
     * @param dto
     * @return
     */
    @PostMapping("/listFileByGroupId")
    public List<TemplateFileInfo> list(@RequestBody ListFileByGroupIdDto dto) {
        if (dto == null) {
            throw new MyException("入参不能为空!!");
        }
        if (dto.getGroupId() == null || dto.getGroupId() < 0) {
            throw new MyException("入参【groupId】非法!!");
        }
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("group_id", dto.getGroupId());
        return templateFileInfoService.list(wrapper);
    }

    /**
     * 上传模板文件
     */
    @PostMapping("/uploadTemplateFiles")
    public Message<?> uploadTemplateFiles(UploadTemplateFilesDto dto) {
        templateFileInfoService.uploadTemplateFiles(dto);
        return Message.okWithNothing();
    }

    /**
     * 根据groupId查询模板文件树
     *
     * @param dto
     * @return
     */
    @PostMapping("/listFileTreeByGroupId")
    public List<TreeNode> listFileTreeByGroupId(@RequestBody ListFileByGroupIdDto dto) {
        return templateFileInfoService.listFileTreeByGroupId(dto);
    }

    /**
     * 获取模板文件的内容
     *
     * @param id
     * @return
     */
    @PostMapping("/getFileContentById")
    public SaveTemplateDto getFileContentById(Long id) {
        return templateFileInfoService.getFileContentById(id);
    }

}
